﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Data;
using Modelo;


namespace Business
{
    public class UsuarioBO
    {
        BDCampus2Entities db = new BDCampus2Entities();
        /// <summary>
        /// Autenticar Usuário
        /// </summary>
        /// <param name="objUsuVO">UsuarioVO</param>
        /// <returns>UsuarioVO</returns>
        public UsuarioVO AutenticarUsuario(UsuarioVO objUsuVO)
        {
            Usuario n = (from c in db.Usuarios
                         where c.LOGIN_USUARIO.Trim().Equals(objUsuVO.loginUsuario.Trim())
                         && c.SENHA_USUARIO.Trim().Equals(objUsuVO.senhaUsuario.Trim())
                         && c.FLG_ATIVO
                         select c).FirstOrDefault();

            if (n != null)
            {
                objUsuVO.idUsuario = n.ID_USUARIO;
                objUsuVO.IdNivelUsuario = n.ID_NIVELUSUARIO;
                objUsuVO.nomeUsuario = n.NOME_USUARIO;
                objUsuVO.idSetor = n.ID_SETOR;
                objUsuVO.primeiroAcesso = n.FLG_PRIMEIRO_ACESSO;
            }
            return objUsuVO;
        }


        /// <summary>
        /// Insere ou Edita um Usuário!
        /// </summary>
        /// <param name="objUsuarioVO">UsuarioVO</param>
        /// <returns>UsuarioVO</returns>
        public UsuarioVO InserirUsuario(UsuarioVO objUsuarioVO)
        {
            Usuario n = (from c in db.Usuarios
                         where c.ID_USUARIO.Equals(objUsuarioVO.idUsuario)
                         select c).FirstOrDefault();

            if (n != null)
            {
                n.NOME_USUARIO = objUsuarioVO.nomeUsuario;
                n.LOGIN_USUARIO = objUsuarioVO.loginUsuario;
                n.CPF_USUARIO = objUsuarioVO.cpfUsuario;
                n.SENHA_USUARIO = objUsuarioVO.senhaUsuario;
                n.ID_SETOR = objUsuarioVO.idSetor;
                n.ID_NIVELUSUARIO = objUsuarioVO.IdNivelUsuario;
                n.DAT_ALTERACAO = DateTime.Now;
                n.FLG_PRIMEIRO_ACESSO = objUsuarioVO.primeiroAcesso;
                n.FLG_ATIVO = objUsuarioVO.Status;
                db.Usuarios.ApplyCurrentValues(n);
                db.SaveChanges();
                objUsuarioVO.idUsuario = n.ID_USUARIO;
                return objUsuarioVO;
            }
            else
            {
                n = new Usuario();
                n.NOME_USUARIO = objUsuarioVO.nomeUsuario;
                n.LOGIN_USUARIO = objUsuarioVO.loginUsuario;
                n.CPF_USUARIO = objUsuarioVO.cpfUsuario;
                n.SENHA_USUARIO = objUsuarioVO.senhaUsuario;
                n.DAT_CADASTRO = DateTime.Now;
                n.ID_SETOR = objUsuarioVO.idSetor;
                n.ID_NIVELUSUARIO = objUsuarioVO.IdNivelUsuario;
                n.FLG_PRIMEIRO_ACESSO = objUsuarioVO.primeiroAcesso;
                n.FLG_ATIVO = objUsuarioVO.Status;
                db.AddToUsuarios(n);
                db.SaveChanges();
                objUsuarioVO.idUsuario = n.ID_USUARIO;
                return objUsuarioVO;
            }

        }
        /// <summary>
        /// Seleciona um Usuario para Editar
        /// </summary>
        /// <param name="objUsuarioVO">int IdUsuario</param>
        /// <returns>UsuarioVO</returns>
        public UsuarioVO SelectUsuario(int idUsuario)
        {
            Usuario n = (from c in db.Usuarios
                         where c.ID_USUARIO.Equals(idUsuario)
                         select c).FirstOrDefault();

            UsuarioVO objUsuarioVO = new UsuarioVO();

            if (n != null)
            {
                objUsuarioVO.nomeUsuario = n.NOME_USUARIO;
                objUsuarioVO.loginUsuario = n.LOGIN_USUARIO;
                objUsuarioVO.cpfUsuario = n.CPF_USUARIO;
                objUsuarioVO.idSetor = n.ID_SETOR;
                objUsuarioVO.IdNivelUsuario = n.ID_NIVELUSUARIO;
                objUsuarioVO.Status = n.FLG_ATIVO;
                objUsuarioVO.idUsuario = n.ID_USUARIO;
                objUsuarioVO.primeiroAcesso = n.FLG_PRIMEIRO_ACESSO;

            }
            return objUsuarioVO;
        }

        /// <summary>
        /// Desabilita um Usuário!
        /// </summary>
        /// <param name="objUsuarioVO">int IdUsuario</param>
        /// <returns>UsuarioVO</returns>
        public int alterarStatusUsuario(int idUsuario)
        {
            Usuario n = (from c in db.Usuarios
                         where c.ID_USUARIO.Equals(idUsuario)
                         select c).FirstOrDefault();

            if (n != null)
            {
                if (n.FLG_ATIVO)
                    n.FLG_ATIVO = false;
                else
                    n.FLG_ATIVO = true;

                db.Usuarios.ApplyCurrentValues(n);
                db.SaveChanges();
                return n.ID_USUARIO;
            }
            else
                return 0;

        }
    }
}

